route.ts 967 B

123456789101112131415161718192021222324252627282930313233343536373839
  1. import { NextRequest, NextResponse } from "next/server";
  2. import { PrismaClient } from "@prisma/client";
  3. const prisma = new PrismaClient();
  4. export const GET = async (
  5. req: NextRequest,
  6. { params }: { params: { id: string } }
  7. ) => {
  8. try {
  9. const file = await prisma.file.findUnique({
  10. where: { id: params.id },
  11. });
  12. if (!file) {
  13. return NextResponse.json(
  14. { error: "File not found" },
  15. { status: 404 }
  16. );
  17. }
  18. // Return file as downloadable response
  19. return new NextResponse(file.data, {
  20. headers: {
  21. "Content-Type": file.mimetype,
  22. "Content-Disposition": `attachment; filename="${file.filename}"`,
  23. "Content-Length": file.size.toString(),
  24. },
  25. });
  26. } catch (error) {
  27. console.error("Error retrieving file:", error);
  28. return NextResponse.json(
  29. { error: "Failed to retrieve file" },
  30. { status: 500 }
  31. );
  32. } finally {
  33. await prisma.$disconnect();
  34. }
  35. };